home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / vol_200 / 228_01 / later.c < prev    next >
Text File  |  1987-07-29  |  3KB  |  112 lines

  1. /*
  2. HEADER:         CUGXXX;
  3. TITLE:          File date compare utility;
  4. DATE:           3-20-86;
  5. DESCRIPTION:    Sets completion code according to dates of two files;
  6. KEYWORDS:       Date comparison;
  7. FILENAME:       LATER.C;
  8. WARNINGS:       System dependent for MS-DOS V2.0;
  9. AUTHORS:        Unknown;
  10. COMPILER:       DeSmet C;
  11. REFERENCES:     US-DISK 1308;
  12. ENDREF
  13. */
  14. /*
  15.  * LATER.C
  16.  
  17. Exit with a 1 if any file has a higher create date than the last or if
  18. the last file does not exist.  A 2 is returned if any other files do not
  19. exist.  Later only works on MS-DOS V2.0. 
  20.  
  21. A>LATER FILE1.C FILE1.O
  22.  
  23. Later will set completion code to 1 if FILE1.C was created after
  24. FILE1.O. 
  25.  
  26. A>LATER FILE1.C FILE1.H FILE1.O
  27.  
  28. Later will set completion code to 1 if FILE1.C or FILE1.H was created
  29. after FILE1.O. 
  30.  
  31. */
  32.  
  33. main(argc,argv)
  34. int  argc;
  35. char *argv[]; 
  36. {
  37.  
  38.    unsigned ifile,ofile,i;
  39.    long odate,dateof();
  40.  
  41.    puts("\nLATER V1.0      ");
  42.  
  43.    if (argc < 3 ) {
  44.       puts("needs two or more arguments\n");
  45.       exit(0);
  46.    }
  47.  
  48.    puts(argv[argc-1]);
  49.  
  50.    if ((ofile=open(argv[argc-1],0)) == -1) {
  51.       puts(" is nonexistent\n");
  52.       exit(1);  /* the last file does not exist */
  53.    }
  54.  
  55.    odate=dateof(ofile);
  56.    close(ofile);
  57.  
  58.    /*   for each file see if it is later than the last one      */
  59.  
  60.    for (i=1; i < argc-1; i++) {
  61.       if ((ifile=open(argv[i],0)) == -1) {
  62.          puts("has nonexistent precursor ");
  63.          puts(argv[i]);
  64.          putchar('\n');
  65.          exit(2);       /* an early file does not exist */
  66.       }
  67.       if (dateof(ifile) > odate) {
  68.          puts(" is earlier than ");
  69.          puts(argv[i]);
  70.          putchar('\n');
  71.          exit(1);       /* found a later file */
  72.       }
  73.       close(ifile);
  74.    }
  75.  
  76.    /*   none of the files are later. set completion code of zero        */
  77.    puts(" is latest\n");
  78.    exit(0);
  79. }
  80.  
  81.  
  82. /*      return a long encoding the date and time of a file      */
  83.  
  84. long dateof(fil)
  85. int  fil; 
  86. {
  87.    static long ret_dt;
  88.  
  89. #asm
  90.    mov          bx,[bp+4]                               ;
  91.    file handle is here. only argument.
  92.        and              bx,0ffh                                 ;
  93.    low byte of file id is MS-DOS handle.
  94.        mov              al,0                                    ;
  95.    code to retrieve date and time.
  96.        mov              ah,57h                                  ;
  97.    dos code for get file date and time.
  98.        int              21h                                             ;
  99.    call dos.
  100.        mov              word dateof_ret_dt_+2,dx;
  101.    store date in high word of ret_dt.
  102.        mov              word dateof_ret_dt_,cx  ;
  103.    store time in low word of ret_dt.
  104.        ;
  105. note: 
  106.    "dateof_" is added to name
  107.        ;
  108.    because ret_dt is static.
  109. #
  110.        return ret_dt;
  111. }
  112.